System.Drawing var input = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "..", "day8.txt")); var instructions = input.Select(s => s.Split(' ')) .Select(s => new { Register = s[0], Direction = s[1], Amount = int.Parse(s[2]), CondReg = s[4], CondOp = s[5], CondVal = int.Parse(s[6]) }); var registers = instructions.Select(i => i.Register).Distinct().ToDictionary(i => i, i => 0); var compareFuncs = new Dictionary> { { "==", (a, b) => a == b }, { "!=", (a, b) => a != b }, { ">", (a, b) => a > b }, { "<", (a, b) => a < b }, { ">=", (a, b) => a >= b}, { "<=", (a, b) => a <= b} }; var part2 = 0; foreach (var i in instructions) { if (compareFuncs[i.CondOp](registers[i.CondReg], i.CondVal)) { registers[i.Register] += i.Direction == "inc" ? i.Amount : -i.Amount; if (registers[i.Register] > part2) part2 = registers[i.Register]; } } var part1 = registers.Max(r => r.Value); part1.Dump(); part2.Dump();